using namespace std;
#include<iostream>
#include<unistd.h>
#include<sys/wait.h>
#include<string>
int main()
{
    // 1.创建管道
    int fds[2]={0};//规定至少2个元素
    int n=pipe(fds);//int pipe(int fd[2]);
    //创建一个管道
    //并将r端和w端的文件描述符分别存储在fds[0]和fds[1]中
    if(n!=0)
    {
        cerr<<"worry"<<endl;
        return 1;
    }
    //2.创建子进程
    pid_t id=fork();
    if(id<0){cerr<<"fork"<<endl;}
    else if(id==0)
    {
        //子进程
        //3.关闭不需要的fd
        close(fds[0]);//子进程关闭r
        int cnt=0;
        while(true)
        {
        string buffer1="hello";
        buffer1+=to_string(getpid());
        buffer1+=to_string(cnt);
        cnt++;
        //子进程对stdin写入 写到屏幕上
        ::write(fds[1],buffer1.c_str(),buffer1.size());
        sleep(1);
        }
        //一切操作完毕后将另一端也关闭
        close(fds[1]);
        exit(0);}
    else
    {
        //父进程
        //3.关闭不需要的fd
        close(fds[1]);//父进程关闭w
        char buffer2[1024];
        while(true)
        {
            //从键盘读取
            ssize_t n=::read(fds[0],buffer2,1024);
            if(n>0)
            {
                buffer2[n]=0;
                cout<<"father message"<<buffer2<<endl;
            }
        }
         pid_t rid=waitpid(id,nullptr,0);
        cout<<"sucess "<<endl;
        //一切操作完毕后将另一端也关闭
        close(fds[0]);
        exit(0);
    }
    return 0;
}



